home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 January: Mac OS SDK / Dev.CD Jan 96 SDK / Dev.CD Jan 96 SDK1.toast / Development Kits (Disc 1) / AOCE / Development Tools / Interfaces / PInterfaces / OCEMail.p < prev    next >
Encoding:
Text File  |  1993-11-10  |  43.0 KB  |  1,614 lines  |  [TEXT/MPS ]

  1. {***********************************************************
  2.  
  3. Created: Tuesday, August 17, 1993 4:37:24 PM
  4.  OCEMail.p
  5.  Pascal Interface to the Macintosh Libraries
  6.  
  7.   Copyright Apple Computer, Inc. 1990-1993
  8.   All rights reserved
  9.  
  10. ***********************************************************}
  11.  
  12.  
  13. {$IFC UNDEFINED UsingIncludes}
  14. {$SETC UsingIncludes:= 0}
  15. {$ENDC}
  16.  
  17. {$IFC NOT UsingIncludes}
  18.     UNIT OCEMail;
  19.     INTERFACE
  20. {$ENDC}
  21.  
  22. {$IFC UNDEFINED UsingOCEMail}
  23. {$SETC UsingOCEMail:= 1}
  24.  
  25. {$I+}
  26. {$SETC OCEMailIncludes:= UsingIncludes}
  27. {$SETC UsingIncludes:= 1}
  28.  
  29.  
  30. {$IFC UNDEFINED UsingDigitalSignature}
  31. {$I DigitalSignature.p}
  32. {$ENDC}
  33.  
  34. {$IFC UNDEFINED UsingFiles}
  35. {$I $$Shell(PInterfaces)Files.p}
  36. {$ENDC}
  37.  
  38. {$IFC UNDEFINED UsingMemory}
  39. {$I $$Shell(PInterfaces)Memory.p}
  40. {$ENDC}
  41.  
  42. {$IFC UNDEFINED UsingOCE}
  43. {$I OCE.p}
  44. {$ENDC}
  45.  
  46. {$IFC UNDEFINED UsingOCEAuthDir}
  47. {$I OCEAuthDir.p}
  48. {$ENDC}
  49.  
  50. {$IFC UNDEFINED UsingOCEMessaging}
  51. {$I OCEMessaging.p}
  52. {$ENDC}
  53.  
  54. {$IFC UNDEFINED UsingTextEdit}
  55. {$I $$Shell(PInterfaces)TextEdit.p}
  56. {$ENDC}
  57.  
  58. {$IFC UNDEFINED UsingTypes}
  59. {$I $$Shell(PInterfaces)Types.p}
  60. {$ENDC}
  61.  
  62. {$SETC UsingIncludes:= OCEMailIncludes}
  63.  
  64. {************************************************************************************}
  65. { Common Definitions }
  66. {************************************************************************************}
  67. TYPE
  68. MailParamBlockHeader = RECORD
  69.     qLink:    Ptr;
  70.     reservedH1: LONGINT;
  71.     reservedH2: LONGINT;
  72.     ioCompletion: ProcPtr;
  73.     ioResult: OSErr;
  74.     saveA5: LONGINT;
  75.     reqCode: INTEGER;
  76.     END;
  77.  
  78. MailMsgRef = LONGINT;                    { reference to a new or open letter or message }
  79.  
  80. MSAMQueueRef = LONGINT;                    { reference to an open msam queue }
  81. MSAMSlotID = INTEGER;                    { identifies slots managed by a PMSAM }
  82.  
  83. MailboxRef = LONGINT;                    { reference to an active mailbox }
  84. MailSlotID = INTEGER;                    { identifies slots within a mailbox }
  85.  
  86. MailSeqNum = RECORD                        { identifies a letter in a mailbox }
  87.     slotID: MailSlotID;
  88.     seqNum: LONGINT;
  89.     END;
  90.  
  91.  
  92. { A MailBuffer is used to describe a buffer used for an IO operation.
  93. The location of the buffer is pointed to by 'buffer'.
  94. When reading, the size of the buffer is 'bufferSize'
  95. and the size of data actually read is 'dataSize'.
  96. When writing, the size of data to be written is 'bufferSize'
  97. and the size of data actually written is 'dataSize'.
  98. }
  99.  
  100. MailBuffer = RECORD
  101.     bufferSize: LONGINT;
  102.     buffer: Ptr;
  103.     dataSize: LONGINT;
  104.     END;
  105.  
  106.  
  107. { A MailReply is used to describe a commonly used reply buffer format.
  108. It contains a count of tuples followed by an array of tuples.
  109. The format of the tuple itself depends on each particular call.
  110. }
  111. MailReply = RECORD
  112.     tupleCount: INTEGER;
  113.     { tuple[1..tupleCount] }
  114.     END;
  115.  
  116.  
  117. { Shared Memory Communication Area used when Mail Manager sends
  118. High Level Events to a PMSAM.
  119. }
  120. SMCA = RECORD
  121.     smcaLength: INTEGER;                    { includes size of length field }
  122.     result: OSErr;
  123.     userBytes: LONGINT;
  124.     CASE INTEGER OF
  125.         1: (slotCID: CreationID);            { may not be used in some cases }
  126.         2: (msgHint: LONGINT);
  127.     END;
  128.  
  129.  
  130. {************************************************************************************}
  131. CONST
  132. { Value of creator and types fields for messages and blocks defined by MailManager }
  133. kMailAppleMailCreator        = 'apml';    { message and letter block creator }
  134.  
  135. kMailLtrMsgType                = 'lttr';    { msg type of letters, reports }
  136. kMailLtrHdrType                = 'lthd';    { contains letter header }
  137. kMailContentType            = 'body';    { contains content of letter }
  138. kMailEnclosureListType        = 'elst';    { contains list of enclosures }
  139. kMailEnclosureDesktopType    = 'edsk';    { contains desktop mgr info for enclosures }
  140.  
  141. kMailEnclosureFileType        = 'asgl';    { contains a file enclosure }
  142. { format is defined by AppleSingle }
  143.  
  144. kMailImageBodyType            = 'imag';    { contains image of letter }
  145. {        format is struct TPfPgDir         - in Printing.h
  146.         TPfPgDir = RECORD
  147.             pageCount: INTEGER;            - number of pages in the image.
  148.             iPgPos: LONGINT[1..129];    - iPgPos[n] is the offset from the start of the block
  149.             END;
  150.                                         - to image of page n.
  151.                                         - iPgPos[n+1] - iPgPos[n] is the length of page n.
  152. }
  153.  
  154. kMailMSAMType                = 'gwyi';    { contains msam specific information }
  155.  
  156. kMailTunnelLtrType            = 'tunl';    { used to read a tunnelled message }
  157. kMailHopInfoType            = 'hopi';    { used to read hopInfo for a tunnelled message }
  158.  
  159. kMailReportType                = 'rpti';    { contains report info }
  160. {
  161. Reports have the isReport bit set in MailIndications and contain a block of type kMailReport.
  162. This block has a header, IPMReportBlockHeader,
  163. followed by an array of elements, each of type IPMRecipientReport
  164. }
  165.  
  166. { Various families used by mail or related msgs }
  167. kMailFamily                    = 'mail';    { Defines family of "mail" msgs: content, header, etc }
  168. kMailFamilyFile                = 'file';    { Defines family of "direct display" msgs }
  169.  
  170. {************************************************************************************}
  171. TYPE
  172. MailAttributeID = INTEGER;
  173.  
  174.  
  175. CONST
  176. { Values of MailAttributeID }
  177. { Message store attributes - stored in the catalog }
  178. { Will always be present in a letter and have fixed sizes }
  179. kMailLetterFlagsBit        = 1;            { MailLetterFlags }
  180.  
  181. { Letter attributes - stored in the letter }
  182. { Will always be present in a letter and have fixed sizes }
  183. kMailIndicationsBit        = 3;            { MailIndications }
  184. kMailMsgTypeBit            = 4;            { OCECreatorType }
  185. kMailLetterIDBit        = 5;            { MailLetterID }
  186. kMailSendTimeStampBit    = 6;            { MailTime }
  187. kMailNestingLevelBit    = 7;            { MailNestingLevel }
  188. kMailMsgFamilyBit        = 8;            { OSType }
  189.  
  190. { Letter attributes - stored in the letter }
  191. { May be present in a letter and have fixed sizes }
  192. kMailReplyIDBit                = 9;        { MailLetterID }
  193. kMailConversationIDBit        = 10;        { MailLetterID }
  194.  
  195. { Letter attributes - stored in the letter }
  196. { May be present in a letter and have variable length sizes }
  197. kMailSubjectBit            = 11;            { RString }
  198. kMailFromBit            = 12;            { MailRecipient }
  199. kMailToBit                = 13;            { MailRecipient }
  200. kMailCcBit                = 14;            { MailRecipient }
  201. kMailBccBit                = 15;            { MailRecipient }
  202.  
  203. TYPE
  204. MailAttributeMask = LONGINT;
  205.  
  206. CONST
  207. { Values of MailAttributeMask }
  208. kMailLetterFlagsMask        = $00000001;  {1<<(kMailLetterFlagsBit-1)}
  209. kMailIndicationsMask        = $00000004;  {1<<(kMailIndicationsBit-1)}
  210. kMailMsgTypeMask            = $00000008;  {1<<(kMailMsgTypeBit-1)}
  211. kMailLetterIDMask            = $00000010;  {1<<(kMailLetterIDBit-1)}
  212. kMailSendTimeStampMask        = $00000020;  {1<<(kMailSendTimeStampBit-1)}
  213. kMailNestingLevelMask        = $00000040;  {1<<(kMailNestingLevelBit-1)}
  214. kMailMsgFamilyMask            = $00000080;  {1<<(kMailMsgFamilyBit-1)}
  215. kMailReplyIDMask            = $00000100;  {1<<(kMailReplyIDBit-1)}
  216. kMailConversationIDMask        = $00000200;  {1<<(kMailConversationIDBit-1)}
  217. kMailSubjectMask            = $00000400;  {1<<(kMailSubjectBit-1)}
  218. kMailFromMask                = $00000800;  {1<<(kMailFromBit-1)}
  219. kMailToMask                    = $00001000;  {1<<(kMailToBit-1)}
  220. kMailCcMask                    = $00002000;  {1<<(kMailCcBit-1)}
  221. kMailBccMask                = $00004000;  {1<<(kMailBccBit-1)}
  222.  
  223.  
  224.  
  225. TYPE
  226. MailAttributeBitmap = PACKED RECORD
  227.         reservedA:            0..65535;    { 16 bits }
  228.         reservedB:            0..1;
  229.         bcc:                0..1;        { BOOLEAN }
  230.         cc:                    0..1;        { BOOLEAN }
  231.         toRecipient:        0..1;        { BOOLEAN }
  232.         from:                0..1;        { BOOLEAN }
  233.         subject:            0..1;        { BOOLEAN }
  234.         conversationID:        0..1;        { BOOLEAN }
  235.         replyID:            0..1;        { BOOLEAN }
  236.         msgFamily:            0..1;        { BOOLEAN }
  237.         nestingLevel:        0..1;        { BOOLEAN }
  238.         sendTimeStamp:        0..1;        { BOOLEAN }
  239.         letterID:            0..1;        { BOOLEAN }
  240.         msgType:            0..1;        { BOOLEAN }
  241.         indications:        0..1;        { BOOLEAN }
  242.         reservedC:            0..1;        { BOOLEAN }
  243.         letterFlags:        0..1;        { BOOLEAN }
  244.     END;
  245.  
  246.  
  247. {************************************************************************************}
  248. MailLetterSystemFlags = INTEGER;
  249.  
  250. CONST
  251. { Values of MailLetterSystemFlags }
  252. kMailIsLocalBit = 2;                    { letter is available locally (either by nature or via cache) }
  253.  
  254. kMailIsLocalMask            = $0004;  {1<<kMailIsLocalBit}
  255.  
  256.  
  257. TYPE
  258. MailLetterUserFlags = INTEGER;
  259.  
  260. CONST
  261. kMailReadBit = 0;                    { this letter has been opened }
  262. kMailDontArchiveBit = 1;            { this letter is not }
  263.                                     { to be archived either because }
  264.                                     { it has already been archived or }
  265.                                     { it should not be archived. }
  266. kMailInTrashBit = 2;                { this letter is in trash }
  267.  
  268.  
  269. { Values of MailLetterUserFlags }
  270. kMailReadMask            = $0001;  {1<<kMailReadBit}
  271. kMailDontArchiveMask    = $0002;  {1<<kMailDontArchiveBit}
  272. kMailInTrashMask        = $0004;  {1<<kMailInTrashBit}
  273.  
  274.  
  275. TYPE
  276. MailLetterFlags = RECORD
  277.     sysFlags: MailLetterSystemFlags;
  278.     userFlags: MailLetterUserFlags;
  279.     END;
  280.  
  281.  
  282. MailMaskedLetterFlags = RECORD
  283.     flagMask: MailLetterFlags;            { flags that are to be set }
  284.     flagValues: MailLetterFlags;        { and their values }
  285.     END;
  286.  
  287.  
  288. CONST
  289. kMailOriginalInReportBit = 1;
  290. kMailNonReceiptReportsBit = 3;
  291. kMailReceiptReportsBit = 4;
  292. kMailForwardedBit = 5;
  293. kMailPriorityBit = 6;
  294. kMailIsReportWithOriginalBit = 8;
  295. kMailIsReportBit = 9;
  296. kMailHasContentBit = 10;
  297. kMailHasSignatureBit = 11;
  298. kMailAuthenticatedBit = 12;
  299. kMailSentBit = 13;
  300.  
  301. CONST
  302. { Values of MailIndications }
  303. kMailSentMask                    = $00001000;  {1<<(kMailSentBit-1)}
  304. kMailAuthenticatedMask            = $00000800;  {1<<(kMailAuthenticatedBit-1)}
  305. kMailHasSignatureMask            = $00000400;  {1<<(kMailHasSignatureBit-1)}
  306. kMailHasContentMask                = $00000200;  {1<<(kMailHasContentBit-1)}
  307. kMailIsReportMask                = $00000100;  {1<<(kMailIsReportBit-1)}
  308. kMailIsReportWithOriginalMask    = $00000080;  {1<<(kMailIsReportWithOriginalBit-1)}
  309. kMailPriorityMask                = $00000060;  {3<<(kMailPriorityBit-1)}
  310. kMailForwardedMask                = $00000010;  {1<<(kMailForwardedBit-1)}
  311. kMailReceiptReportsMask            = $00000008;  {1<<(kMailReceiptReportsBit-1)}
  312. kMailNonReceiptReportsMask        = $00000004;  {1<<(kMailNonReceiptReportsBit-1)}
  313. kMailOriginalInReportMask        = $00000003;  {3<<kMailOriginalInReportBit-1)}
  314.  
  315.  
  316. TYPE
  317. MailIndications = PACKED RECORD
  318.     reservedB:                 0..65535;    { 16 bits }
  319.     hasStandardContent:        0..1;        { this letter has standard interchange content }
  320.     hasImageContent:        0..1;        { this letter has a standard image }
  321.     hasNativeContent:        0..1;        { this letter has a main enclosure }
  322.     sent:                    0..1;        { this letter was sent, not just composed }
  323.     authenticated:            0..1;        { this letter was created and transported with authentication }
  324.     hasSignature:            0..1;        { this letter was signed with a digital signature }
  325.     hasContent:                0..1;        { this letter has content }
  326.     isReport:                0..1;        { this letter is really a report }
  327.     isReportWithOriginal:    0..1;        { this report contains the original letter }
  328.  
  329.     priority:                0..3;        { Bits defined as in IPMPriority }
  330.                                         { the originator has: }
  331.     forwarded:                0..1;        {        forwarded this letter }
  332.  
  333.                                         { the originator requests: }
  334.     receiptReports:            0..1;        {        delivery reports }
  335.     nonReceiptReports:        0..1;        {        non-delivery reports }
  336.     originalInReport:        0..3;        {        original letter to be enclosed in reports }
  337.     END;
  338.  
  339.  
  340. CONST
  341. { values of the field originalInReport in MailIndications }
  342. kMailNoOriginal                = 0;        { do not enclose original in reports }
  343. kMailEncloseOnNonReceipt    = 3;        { enclose original in non-delivery reports }
  344.  
  345.  
  346. TYPE
  347. MailLetterID = IPMMsgID;
  348.  
  349. MailTime = RECORD
  350.     time: UTCTime;                        { current UTC(GMT) time }
  351.     offset: UTCOffset;                    { offset from GMT }
  352.     END;
  353.  
  354.  
  355. MailNestingLevel = INTEGER;                { innermost letter has nestingLevel 0 }
  356.  
  357. MailRecipient = OCERecipient;
  358.  
  359. {************************************************************************************}
  360. CONST
  361. kMailTextSegmentBit = 0;
  362. kMailPictSegmentBit = 1;
  363. kMailSoundSegmentBit = 2;
  364. kMailStyledTextSegmentBit = 3;
  365. kMailMovieSegmentBit = 4;
  366.  
  367. TYPE
  368. MailSegmentMask = INTEGER;
  369.  
  370. CONST
  371. { Values of MailSegmentMask }
  372. kMailTextSegmentMask        = $0001;  {1<<kMailTextSegmentBit}
  373. kMailPictSegmentMask        = $0002;  {1<<kMailPictSegmentBit}
  374. kMailSoundSegmentMask        = $0004;  {1<<kMailSoundSegmentBit}
  375. kMailStyledTextSegmentMask    = $0008;  {1<<kMailStyledTextSegmentBit}
  376. kMailMovieSegmentMask        = $0010;  {1<<kMailMovieSegmentBit}
  377.  
  378.  
  379. TYPE
  380. MailSegmentType = INTEGER;
  381.  
  382. CONST
  383. { Values of MailSegmentType }
  384. kMailInvalidSegmentType        = 0;
  385. kMailTextSegmentType        = 1;
  386. kMailPictSegmentType        = 2;
  387. kMailSoundSegmentType        = 3;
  388. kMailStyledTextSegmentType    = 4;
  389. kMailMovieSegmentType        = 5;
  390.  
  391.  
  392.  
  393. {************************************************************************************}
  394. kMailErrorLogEntryVersion         = $101;
  395. kMailMSAMErrorStringListID        = 128;    { These 'STR#' resources should be }
  396. kMailMSAMActionStringListID        = 129;    { in the PMSAM resource fork }
  397.  
  398. TYPE
  399. MailLogErrorType = INTEGER;
  400.  
  401. CONST
  402. { Values of MailLogErrorType }
  403. kMailELECorrectable            = 0;
  404. kMailELEError                = 1;
  405. kMailELEWarning                = 2;
  406. kMailELEInformational        = 3;
  407.  
  408.  
  409. TYPE
  410. MailLogErrorCode = INTEGER;
  411.  
  412. CONST
  413. { Values of MailLogErrorCode }
  414.                                     { positive codes are indices into }
  415.                                     { PMSAM defined STRINGs }
  416. kMailMSAMErrorCode            = 0;
  417. kMailMiscError                = -1;    { negative codes are OCE defined }
  418. kMailNoModem                = -2;    { modem required, but missing }
  419.  
  420.  
  421. TYPE
  422. MailErrorLogEntryInfo = RECORD            { < 128 bytes }
  423.     version: INTEGER;
  424.     timeOccurred: UTCTime;                { do not fill in }
  425.     reportingPMSAM: Str31;                { do not fill in }
  426.     reportingMSAMSlot: Str31;            { do not fill in }
  427.     errorType: MailLogErrorType;
  428.     errorCode: MailLogErrorCode;
  429.     errorResource: INTEGER;                { resources are valid if }
  430.     actionResource: INTEGER;            { errorCode = kMailMSAMErrorCode }
  431.                                         { index starts from 1 }
  432.     filler: LONGINT;
  433.     filler2: INTEGER;
  434.     END;
  435.  
  436.  
  437. {************************************************************************************}
  438. MailBlockMode = INTEGER;
  439.  
  440. CONST
  441. { Values of MailBlockMode }
  442. kMailFromStart        = 1;                { write data from offset calculated from }
  443. kMailFromLEOB        = 2;                { start of block, end of block, }
  444. kMailFromMark        = 3;                { or from the current mark }
  445.  
  446.  
  447. TYPE
  448. MailEnclosureInfo = RECORD
  449.     enclosureName: StringPtr;
  450.     catInfo: CInfoPBPtr;
  451.     comment: StringPtr;
  452.     icon: Ptr;
  453.     END;
  454.  
  455.  
  456. {************************************************************************************}
  457. CONST
  458. kOCESetupLocationNone    = 0;            { disconnect state }
  459. kOCESetupLocationMax    = 8;            { maximum location value }
  460.  
  461. TYPE
  462. OCESetupLocation = Byte;
  463.  
  464. { location state is a bitmask, 0x1=>1st location active, 
  465.   0x2 => 2nd, 0x4 => 3rd, etc.
  466. }
  467.  
  468. {
  469. #define MailLocationMask(locationNumber) (1<<((locationNumber)-1))
  470. }
  471.  
  472. TYPE
  473. MailLocationFlags = Byte;
  474.  
  475. MailLocationInfo = RECORD
  476.     location:    OCESetupLocation;
  477.     active:        MailLocationFlags;
  478.     END;
  479.  
  480. {************************************************************************************}
  481. { Definitions for Personal MSAMs }
  482. {************************************************************************************}
  483.  
  484. CONST
  485. kMailEPPCMsgVersion = 3;
  486.  
  487. TYPE
  488. MailEPPCMsg = RECORD
  489.     version: INTEGER;
  490.     CASE INTEGER OF
  491.         1: (theSMCA:        ^SMCA);                { for 'crsl', 'mdsl', 'dlsl', 'sndi', 'msgo', 'admn' }
  492.         2: (sequenceNumber:    LONGINT);            { for 'inqu', 'dlom' }
  493.         3: (locationInfo:    MailLocationInfo);    { for 'locc' }
  494.     END;
  495.  
  496.  
  497. CONST
  498. { Values of OCE defined High Level Event message classes }
  499. kMailEPPCCreateSlot            = 'crsl';
  500. kMailEPPCModifySlot            = 'mdsl';
  501. kMailEPPCDeleteSlot            = 'dlsl';
  502. kMailEPPCShutDown            = 'quit';
  503. kMailEPPCMailboxOpened        = 'mbop';
  504. kMailEPPCMailboxClosed        = 'mbcl';
  505. kMailEPPCMsgPending            = 'msgp';
  506. kMailEPPCSendImmediate        = 'sndi';
  507. kMailEPPCContinue            = 'cont';
  508. kMailEPPCSchedule            = 'sked';
  509. kMailEPPCAdmin                = 'admn';
  510. kMailEPPCInQUpdate            = 'inqu';
  511. kMailEPPCMsgOpened            = 'msgo';
  512. kMailEPPCDeleteOutQMsg        = 'dlom';
  513. kMailEPPCWakeup                = 'wkup';
  514. kMailEPPCLocationChanged    = 'locc';
  515.  
  516.  
  517. TYPE
  518. MailTimer = RECORD
  519.     CASE INTEGER OF
  520.         1: (frequency: LONGINT);        { how often to connect (secs) }
  521.         2: (connectTime: LONGINT);        { time since midnight (secs) }
  522.     END;
  523.  
  524. CONST
  525. kMailTimerOff        = 0;                { control is off }
  526. kMailTimerTime        = 1;                { specifies connect time (relative to midnight) }
  527. kMailTimerFrequency    = 2;                { specifies connect frequency }
  528.  
  529.  
  530. TYPE
  531. MailTimerKind = Byte;
  532.  
  533. MailTimers = PACKED RECORD
  534.     sendTimeKind: MailTimerKind;        { either kMailTimerTime or kMailTimerFrequency }
  535.     receiveTimeKind: MailTimerKind;        { either kMailTimerTime or kMailTimerFrequency }
  536.     send: MailTimer;
  537.     receive: MailTimer;
  538.     END;
  539.  
  540.  
  541. MailStandardSlotInfoAttribute = PACKED RECORD
  542.     version: INTEGER;
  543.     active: MailLocationFlags;                    { active if MailLocationMask(i) is set }
  544.     padByte: Byte;
  545.     sendReceiveTimer: MailTimers;
  546.     END;
  547.  
  548.  
  549. PMSAMGetMSAMRecordPB = RECORD
  550.     qLink:    Ptr;
  551.     reservedH1: LONGINT;
  552.     reservedH2: LONGINT;
  553.     ioCompletion: ProcPtr;
  554.     ioResult: OSErr;
  555.     saveA5: LONGINT;
  556.     reqCode: INTEGER;
  557.  
  558.     msamCID: CreationID;
  559.     END;
  560.  
  561.  
  562. PMSAMOpenQueuesPB = RECORD
  563.     qLink:    Ptr;
  564.     reservedH1: LONGINT;
  565.     reservedH2: LONGINT;
  566.     ioCompletion: ProcPtr;
  567.     ioResult: OSErr;
  568.     saveA5: LONGINT;
  569.     reqCode: INTEGER;
  570.  
  571.     inQueueRef: MSAMQueueRef;
  572.     outQueueRef: MSAMQueueRef;
  573.     msamSlotID: MSAMSlotID;
  574.     filler: ARRAY[1..2] OF LONGINT;
  575.     END;
  576.  
  577.  
  578. PMSAMStatus = INTEGER;
  579.  
  580. CONST
  581. { Values of PMSAMStatus }
  582. kPMSAMStatusPending    = 1;                { for inQueue and outQueue }
  583. kPMSAMStatusError    = 2;                { for inQueue and outQueue }
  584. kPMSAMStatusSending    = 3;                { for outQueue only }
  585. kPMSAMStatusCaching    = 4;                { for inQueue only }
  586. kPMSAMStatusSent    = 5;                { for outQueue only }
  587.  
  588.  
  589. TYPE
  590. PMSAMSetStatusPB = RECORD
  591.     qLink:    Ptr;
  592.     reservedH1: LONGINT;
  593.     reservedH2: LONGINT;
  594.     ioCompletion: ProcPtr;
  595.     ioResult: OSErr;
  596.     saveA5: LONGINT;
  597.     reqCode: INTEGER;
  598.  
  599.     queueRef: MSAMQueueRef;
  600.     seqNum: LONGINT;
  601.     msgHint: LONGINT;                    { for posting cache error,set this to 0 when report outq status }
  602.     status: PMSAMStatus;
  603.     END;
  604.  
  605.  
  606. PMSAMLogErrorPB = RECORD
  607.     qLink:    Ptr;
  608.     reservedH1: LONGINT;
  609.     reservedH2: LONGINT;
  610.     ioCompletion: ProcPtr;
  611.     ioResult: OSErr;
  612.     saveA5: LONGINT;
  613.     reqCode: INTEGER;
  614.  
  615.     msamSlotID: MSAMSlotID;                { 0 for PMSAM errors }
  616.     logEntry: ^MailErrorLogEntryInfo;
  617.     filler: ARRAY[1..2] OF LONGINT;
  618.     END;
  619.  
  620.  
  621. {**************************************************************************************}
  622. CONST
  623. kMailMsgSummaryVersion    = 1;
  624.  
  625. TYPE
  626. MailMasterData = RECORD
  627.     attrMask: MailAttributeBitmap;        { indicates attributes present in MsgSummary }
  628.     messageID: MailLetterID;
  629.     replyID: MailLetterID;
  630.     conversationID: MailLetterID;
  631.     END;
  632.  
  633. { Values for addressedToMe in MailCoreData record }
  634. CONST
  635. kAddressedAs_TO        = $1;
  636. kAddressedAs_CC        = $2;
  637. kAddressedAs_BCC    = $4;
  638.  
  639. TYPE
  640. MailCoreData = RECORD
  641.     letterFlags: MailLetterFlags;
  642.     messageSize: LONGINT;
  643.     letterIndications: MailIndications;
  644.     messageType: OCECreatorType;
  645.     sendTime: MailTime;
  646.     messageFamily: OSType;
  647.     reserved: Byte;
  648.     addressedToMe: Byte;
  649.     agentInfo: ARRAY[1..6] OF Byte;        { 6 bytes of special info [set to zero] }
  650.     { these are variable length and even padded }
  651.     sender: RString32;                    { recipient's entityName (trunc) }
  652.     subject: RString32;                    { subject maybe truncated }
  653.     END;
  654.  
  655. MSAMMsgSummary = RECORD
  656.     version: INTEGER;                    { following flags are defaulted by Toolbox }
  657.     msgDeleted: BOOLEAN;                { true if msg is to be deleted by PMSAM }
  658.     msgUpdated: BOOLEAN;                { true if msgSummary was updated by MailManager }
  659.     msgCached: BOOLEAN;                    { true if msg is in the slot's InQueue }
  660.     {padByte: Byte;}
  661.     masterData: MailMasterData;
  662.     coreData: MailCoreData;
  663.     END;
  664.  
  665. CONST
  666. kMailMaxPMSAMMsgSummaryData = 128;        { PMSAM can put up to 128 bytes of private msg summary data }
  667.  
  668. TYPE
  669. PMSAMCreateMsgSummaryPB = RECORD
  670.     qLink:    Ptr;
  671.     reservedH1: LONGINT;
  672.     reservedH2: LONGINT;
  673.     ioCompletion: ProcPtr;
  674.     ioResult: OSErr;
  675.     saveA5: LONGINT;
  676.     reqCode: INTEGER;
  677.  
  678.     inQueueRef: MSAMQueueRef;
  679.     seqNum: LONGINT;                { <- seq of the new message }
  680.     msgSummary: ^MSAMMsgSummary;    { attributes and mask filled in }
  681.     buffer: ^MailBuffer;            { PMSAM specific data to be appended }
  682.     END;
  683.  
  684.  
  685. PMSAMPutMsgSummaryPB = RECORD
  686.     qLink:    Ptr;
  687.     reservedH1: LONGINT;
  688.     reservedH2: LONGINT;
  689.     ioCompletion: ProcPtr;
  690.     ioResult: OSErr;
  691.     saveA5: LONGINT;
  692.     reqCode: INTEGER;
  693.  
  694.     inQueueRef: MSAMQueueRef;
  695.     seqNum: LONGINT;
  696.     letterFlags: ^MailMaskedLetterFlags;    { if not nil, then set letterFlags }
  697.     buffer: ^MailBuffer;                    { PMSAM specific data to be overwritten }
  698.     END;
  699.  
  700.  
  701. PMSAMGetMsgSummaryPB = RECORD
  702.     qLink:    Ptr;
  703.     reservedH1: LONGINT;
  704.     reservedH2: LONGINT;
  705.     ioCompletion: ProcPtr;
  706.     ioResult: OSErr;
  707.     saveA5: LONGINT;
  708.     reqCode: INTEGER;
  709.  
  710.     inQueueRef: MSAMQueueRef;
  711.     seqNum: LONGINT;
  712.     msgSummary: ^MSAMMsgSummary;        { if not nil, then read in the msgSummary }
  713.     buffer: ^MailBuffer;                { PMSAM specific data to be read }
  714.     msgSummaryOffset: INTEGER;            { offset of PMSAM specific data  }
  715.                                         { from start of MsgSummary }
  716.     END;
  717.  
  718.  
  719. {**************************************************************************************}
  720. { Definitions for Server MSAMs }
  721. {************************************************************************************}
  722.  
  723. SMSAMAdminCode = INTEGER;
  724.  
  725. CONST
  726. { Values of SMSAMAdminCode }
  727. kSMSAMNotifyFwdrSetupChange        = 1;
  728. kSMSAMNotifyFwdrNameChange        = 2;
  729. kSMSAMNotifyFwdrPwdChange            = 3;
  730. kSMSAMGetDynamicFwdrParams        = 4;
  731.  
  732.  
  733. TYPE
  734. SMSAMSlotChanges = LONGINT;
  735.  
  736. CONST
  737. kSMSAMFwdrHomeInternetChangedBit = 0;
  738. kSMSAMFwdrConnectedToChangedBit = 1;
  739. kSMSAMFwdrForeignRLIsChangedBit = 2;
  740. kSMSAMFwdrMnMServerChangedBit = 3;
  741.  
  742. { Values of SMSAMSlotChanges }
  743. kSMSAMFwdrEverythingChangedMask        = -1;
  744. kSMSAMFwdrHomeInternetChangedMask    = $00000001;  {1<<kSMSAMFwdrHomeInternetChangedBit}
  745. kSMSAMFwdrConnectedToChangedMask    = $00000002;  {1<<kSMSAMFwdrConnectedToChangedBit}
  746. kSMSAMFwdrForeignRLIsChangedMask    = $00000004;  {1<<kSMSAMFwdrForeignRLIsChangedBit}
  747. kSMSAMFwdrMnMServerChangedMask        = $00000008;  {1<<kSMSAMFwdrMnMServerChangedBit}
  748.  
  749.  
  750. TYPE
  751. SMSAMSetupChange = RECORD                { kSMSAMNotifyFwdrSetupChange }
  752.     whatChanged: SMSAMSlotChanges;        {  --> bitmap of what parameters changed }
  753.     serverHint: AddrBlock;                {  --> try this ADAP server first }
  754.     END;
  755.  
  756.  
  757. SMSAMNameChange = RECORD                { kSMSAMNotifyFwdrNameChange }
  758.     newName: RString;                    {  --> msams new name }
  759.     serverHint: AddrBlock;                {  --> try this ADAP server first }
  760.     END;
  761.  
  762.  
  763. SMSAMPasswordChange = RECORD            { kSMSAMNotifyFwdrPasswordChange }
  764.     newPassword: RString;                {  --> msams new password }
  765.     serverHint: AddrBlock;                {  --> try this ADAP server first }
  766.     END;
  767.  
  768.  
  769. SMSAMDynamicParams = RECORD                { kSMSAMGetDynamicFwdrParams }
  770.     curDiskUsed: LONGINT;                { <--  amount of disk space used by msam }
  771.     curMemoryUsed: LONGINT;                { <--  amount of memory used by msam }
  772.     END;
  773.  
  774.  
  775. SMSAMAdminEPPCRequest = RECORD
  776.     adminCode: SMSAMAdminCode;
  777.     CASE INTEGER OF
  778.         1: (setupChange: SMSAMSetupChange);
  779.         2: (nameChange: SMSAMNameChange);
  780.         3: (passwordChange: SMSAMPasswordChange);
  781.         4: (dynamicParams: SMSAMDynamicParams);
  782.     END;
  783.  
  784.  
  785. SMSAMSetupPB = RECORD
  786.     qLink:    Ptr;
  787.     reservedH1: LONGINT;
  788.     reservedH2: LONGINT;
  789.     ioCompletion: ProcPtr;
  790.     ioResult: OSErr;
  791.     saveA5: LONGINT;
  792.     reqCode: INTEGER;
  793.  
  794.     serverMSAM: RecordIDPtr;
  795.     password: RStringPtr;
  796.     gatewayType: OSType;
  797.     gatewayTypeDescription: RStringPtr;
  798.     catalogServerHint: AddrBlock;
  799.     END;
  800.  
  801.  
  802. SMSAMStartupPB = RECORD
  803.     qLink:    Ptr;
  804.     reservedH1: LONGINT;
  805.     reservedH2: LONGINT;
  806.     ioCompletion: ProcPtr;
  807.     ioResult: OSErr;
  808.     saveA5: LONGINT;
  809.     reqCode: INTEGER;
  810.  
  811.     msamIdentity: AuthIdentity;
  812.     queueRef: MSAMQueueRef;
  813.     END;
  814.  
  815.  
  816. SMSAMShutdownPB = RECORD
  817.     qLink:    Ptr;
  818.     reservedH1: LONGINT;
  819.     reservedH2: LONGINT;
  820.     ioCompletion: ProcPtr;
  821.     ioResult: OSErr;
  822.     saveA5: LONGINT;
  823.     reqCode: INTEGER;
  824.  
  825.     queueRef: MSAMQueueRef;
  826.     END;
  827.  
  828.  
  829. {**************************************************************************************}
  830. { Definitions for reading and writing MSAM Letters }
  831. {**************************************************************************************}
  832.  
  833. MSAMEnumeratePB = RECORD
  834.     qLink:    Ptr;
  835.     reservedH1: LONGINT;
  836.     reservedH2: LONGINT;
  837.     ioCompletion: ProcPtr;
  838.     ioResult: OSErr;
  839.     saveA5: LONGINT;
  840.     reqCode: INTEGER;
  841.  
  842.     queueRef: MSAMQueueRef;
  843.     startSeqNum: LONGINT;
  844.     nextSeqNum: LONGINT;
  845.     buffer: MailBuffer;
  846.     { buffer contains a Mail Reply. Each tuple is a
  847.         MSAMEnumerateInQReply when enumerating the inQueue
  848.         MSAMEnumerateOutQReply when enumerating the outQueue
  849.     }
  850.     END;
  851.  
  852.  
  853. MSAMEnumerateInQReply = RECORD
  854.     seqNum: LONGINT;
  855.     msgDeleted: BOOLEAN;                { true if msg is to be deleted by PMSAM }
  856.     msgUpdated: BOOLEAN;                { true if MsgSummary has been updated by TB }
  857.     msgCached: BOOLEAN;                    { true if msg is in the incoming queue }
  858.     {padByte: Byte;}
  859.     END;
  860.  
  861.  
  862. MSAMEnumerateOutQReply = PACKED RECORD
  863.     seqNum: LONGINT;
  864.     done: BOOLEAN;                        { true if all responsible recipients have been processed }
  865.     priority: IPMPriority;
  866.     approxSize: LONGINT;
  867.     tunnelForm: BOOLEAN;                { true if this letter has to be tunnelled }
  868.     padByte: Byte;
  869.     nextHop: NetworkSpec;                { valid if tunnelForm is true }
  870.     msgType: OCECreatorType;            { valid if tunnelForm is true }
  871.     END;
  872.  
  873.  
  874. MSAMDeletePB = PACKED RECORD
  875.     qLink:    Ptr;
  876.     reservedH1: LONGINT;
  877.     reservedH2: LONGINT;
  878.     ioCompletion: ProcPtr;
  879.     ioResult: OSErr;
  880.     saveA5: LONGINT;
  881.     reqCode: INTEGER;
  882.  
  883.     queueRef: MSAMQueueRef;
  884.     seqNum: LONGINT;
  885.     msgOnly: BOOLEAN;                    { only valid for PMSAM & inQueue }
  886.                                         { set true to delete message but not msgSummary }
  887.     padByte: Byte;
  888.     result: OSErr;                        { only valid for SMSAM & tunnelled messages }
  889.                                         { Values for result:
  890.                                             kIPMNoResponsibility
  891.                                             kIPMNoInformation
  892.                                             kIPMRecMaybeNotSent
  893.                                             kIPMRecMaybeSent
  894.                                             }
  895.     END;
  896.  
  897. MSAMOpenPB = RECORD
  898.     qLink:    Ptr;
  899.     reservedH1: LONGINT;
  900.     reservedH2: LONGINT;
  901.     ioCompletion: ProcPtr;
  902.     ioResult: OSErr;
  903.     saveA5: LONGINT;
  904.     reqCode: INTEGER;
  905.  
  906.     queueRef: MSAMQueueRef;
  907.     seqNum: LONGINT;
  908.     mailMsgRef: MailMsgRef;
  909.     END;
  910.  
  911.  
  912. MSAMOpenNestedPB = RECORD
  913.     qLink:    Ptr;
  914.     reservedH1: LONGINT;
  915.     reservedH2: LONGINT;
  916.     ioCompletion: ProcPtr;
  917.     ioResult: OSErr;
  918.     saveA5: LONGINT;
  919.     reqCode: INTEGER;
  920.  
  921.     mailMsgRef: MailMsgRef;
  922.     nestedRef: MailMsgRef;
  923.     END;
  924.  
  925.  
  926. MSAMClosePB = RECORD
  927.     qLink:    Ptr;
  928.     reservedH1: LONGINT;
  929.     reservedH2: LONGINT;
  930.     ioCompletion: ProcPtr;
  931.     ioResult: OSErr;
  932.     saveA5: LONGINT;
  933.     reqCode: INTEGER;
  934.  
  935.     mailMsgRef: MailMsgRef;
  936.     END;
  937.  
  938.  
  939. MSAMGetMsgHeaderPB = RECORD
  940.     qLink:    Ptr;
  941.     reservedH1: LONGINT;
  942.     reservedH2: LONGINT;
  943.     ioCompletion: ProcPtr;
  944.     ioResult: OSErr;
  945.     saveA5: LONGINT;
  946.     reqCode: INTEGER;
  947.  
  948.     mailMsgRef: MailMsgRef;
  949.     selector: IPMHeaderSelector;
  950.     offset: LONGINT;
  951.     buffer: MailBuffer;
  952.     remaining: LONGINT;
  953.     END;
  954.  
  955.  
  956. MSAMGetAttributesPB = RECORD
  957.     qLink:    Ptr;
  958.     reservedH1: LONGINT;
  959.     reservedH2: LONGINT;
  960.     ioCompletion: ProcPtr;
  961.     ioResult: OSErr;
  962.     saveA5: LONGINT;
  963.     reqCode: INTEGER;
  964.  
  965.     mailMsgRef: MailMsgRef;
  966.     requestMask: MailAttributeBitmap;    { kMailIndicationsBit thru kMailSubjectBit }
  967.     buffer: MailBuffer;
  968.     {    buffer returned will contain the attribute values of
  969.         the attributes indicated in responseMask,
  970.         from the attribute indicated by the least significant bit set
  971.         to the attribute indicated by the most significant bit set.
  972.         Note that recipients - from, to, cc, bcc cannot be read using
  973.         this call. Use GetRecipients to read these.
  974.     }
  975.     responseMask: MailAttributeBitmap;
  976.     more: BOOLEAN;
  977.     END;
  978.  
  979. CONST
  980. kMailResolvedList = 0;                    { attrID value to get resolved recipient list }
  981.  
  982. TYPE
  983. MailOriginalRecipient = RECORD
  984.     index: INTEGER;
  985.     { Followed by OCEPackedRecipient }
  986.     END;
  987.  
  988.  
  989.  
  990. MailResolvedRecipient = PACKED RECORD
  991.     index: INTEGER;
  992.     recipientFlags: INTEGER;
  993.     responsible: BOOLEAN;
  994.     padByte: Byte;
  995.     { Followed by OCEPackedRecipient }
  996.     END;
  997.  
  998.  
  999.  
  1000. MSAMGetRecipientsPB = RECORD
  1001.     qLink:    Ptr;
  1002.     reservedH1: LONGINT;
  1003.     reservedH2: LONGINT;
  1004.     ioCompletion: ProcPtr;
  1005.     ioResult: OSErr;
  1006.     saveA5: LONGINT;
  1007.     reqCode: INTEGER;
  1008.  
  1009.     mailMsgRef: MailMsgRef;
  1010.     attrID: MailAttributeID;            { kMailFromBit thru kMailBccBit }
  1011.     startIndex: INTEGER;                { starts at 1 }
  1012.     buffer: MailBuffer;
  1013.     {     buffer contains a Mail Reply. Each tuple is a
  1014.         MailOriginalRecipient if getting original recipients
  1015.                                 ie the attrID is kMail[From, To, Cc, Bcc]Bit
  1016.         MailResolvedRecipient if getting resolved reicpients
  1017.                                 ie the attrID is kMailResolvedList
  1018.         Both tuples are word alligned.
  1019.     }
  1020.     nextIndex: INTEGER;
  1021.     more: BOOLEAN;
  1022.     END;
  1023.  
  1024.  
  1025. MSAMGetContentPB = RECORD
  1026.     qLink:    Ptr;
  1027.     reservedH1: LONGINT;
  1028.     reservedH2: LONGINT;
  1029.     ioCompletion: ProcPtr;
  1030.     ioResult: OSErr;
  1031.     saveA5: LONGINT;
  1032.     reqCode: INTEGER;
  1033.  
  1034.     mailMsgRef: MailMsgRef;
  1035.     segmentMask: MailSegmentMask;
  1036.     buffer: MailBuffer;
  1037.     textScrap: ^StScrpRec;
  1038.     script: ScriptCode;
  1039.     segmentType: MailSegmentType;
  1040.     endOfScript: BOOLEAN;
  1041.     endOfSegment: BOOLEAN;
  1042.     endOfContent: BOOLEAN;
  1043.     segmentLength: LONGINT;            { NEW: <-  valid first call in a segment }
  1044.     segmentID: LONGINT;                { NEW: <-> identifier for this segment }
  1045.     END;
  1046.  
  1047.  
  1048. MSAMGetEnclosurePB = PACKED RECORD
  1049.     qLink:    Ptr;
  1050.     reservedH1: LONGINT;
  1051.     reservedH2: LONGINT;
  1052.     ioCompletion: ProcPtr;
  1053.     ioResult: OSErr;
  1054.     saveA5: LONGINT;
  1055.     reqCode: INTEGER;
  1056.  
  1057.     mailMsgRef: MailMsgRef;
  1058.     contentEnclosure: BOOLEAN;
  1059.     padByte: Byte;
  1060.     buffer: MailBuffer;
  1061.     endOfFile: BOOLEAN;
  1062.     endOfEnclosures: BOOLEAN;
  1063.     END;
  1064.  
  1065.  
  1066. MailBlockInfo = RECORD
  1067.     blockType: OCECreatorType;
  1068.     offset: LONGINT;
  1069.     blockLength: LONGINT;
  1070.     END;
  1071.  
  1072.  
  1073. MSAMEnumerateBlocksPB = RECORD
  1074.     qLink:    Ptr;
  1075.     reservedH1: LONGINT;
  1076.     reservedH2: LONGINT;
  1077.     ioCompletion: ProcPtr;
  1078.     ioResult: OSErr;
  1079.     saveA5: LONGINT;
  1080.     reqCode: INTEGER;
  1081.  
  1082.     mailMsgRef: MailMsgRef;
  1083.     startIndex: INTEGER;                { starts at 1 }
  1084.     buffer: MailBuffer;
  1085.     {     buffer contains a Mail Reply. Each tuple is a MailBlockInfo }
  1086.     nextIndex: INTEGER;
  1087.     more: BOOLEAN;
  1088.     END;
  1089.  
  1090.  
  1091. MSAMGetBlockPB = PACKED RECORD
  1092.     qLink:    Ptr;
  1093.     reservedH1: LONGINT;
  1094.     reservedH2: LONGINT;
  1095.     ioCompletion: ProcPtr;
  1096.     ioResult: OSErr;
  1097.     saveA5: LONGINT;
  1098.     reqCode: INTEGER;
  1099.  
  1100.     mailMsgRef: MailMsgRef;
  1101.     blockType: OCECreatorType;
  1102.     blockIndex: INTEGER;
  1103.     buffer: MailBuffer;
  1104.     dataOffset: LONGINT;
  1105.     endOfBlock: BOOLEAN;
  1106.     padByte: Byte;
  1107.     remaining: LONGINT;
  1108.     END;
  1109.  
  1110.  
  1111. { YOU SHOULD BE USING THE NEW FORM OF MARK RECIPIENTS
  1112.   THIS VERSION IS MUCH SLOWER AND KEPT FOR COMPATIBILITY
  1113.   REASONS.
  1114. }
  1115.  
  1116. MSAMMarkRecipientsPB = RECORD            { not valid for tunnel form letters }
  1117.     qLink:    Ptr;
  1118.     reservedH1: LONGINT;
  1119.     reservedH2: LONGINT;
  1120.     ioCompletion: ProcPtr;
  1121.     ioResult: OSErr;
  1122.     saveA5: LONGINT;
  1123.     reqCode: INTEGER;
  1124.  
  1125.     queueRef: MSAMQueueRef;
  1126.     seqNum: LONGINT;
  1127.     buffer: MailBuffer;
  1128.     {     buffer contains a Mail Reply. Each tuple is an unsigned short,
  1129.         the index of a recipient to be marked. }
  1130.     END;
  1131.  
  1132. {
  1133.   same as MSAMMarkRecipients except it takes a mailMsgRef instead of 
  1134.   queueRef, seqNum 
  1135. }
  1136.  
  1137. MSAMnMarkRecipientsPB = RECORD        { not valid for tunnel form letters }
  1138.     qLink:    Ptr;
  1139.     reservedH1: LONGINT;
  1140.     reservedH2: LONGINT;
  1141.     ioCompletion: ProcPtr;
  1142.     ioResult: OSErr;
  1143.     saveA5: LONGINT;
  1144.     reqCode: INTEGER;
  1145.  
  1146.     mailMsgRef: MailMsgRef;
  1147.     buffer: MailBuffer;
  1148.     {     buffer contains a Mail Reply. Each tuple is an unsigned short,
  1149.         the index of a recipient to be marked. }
  1150.     END;
  1151.  
  1152. {**************************************************************************************}
  1153. MSAMCreatePB = RECORD
  1154.     qLink:    Ptr;
  1155.     reservedH1: LONGINT;
  1156.     reservedH2: LONGINT;
  1157.     ioCompletion: ProcPtr;
  1158.     ioResult: OSErr;
  1159.     saveA5: LONGINT;
  1160.     reqCode: INTEGER;
  1161.  
  1162.     queueRef: MSAMQueueRef;
  1163.     asLetter: BOOLEAN;                    { indicate if we should create as letter or msg }
  1164.     msgType: IPMMsgType;                { is msg creator/type if msg, mail type creator o.w. }
  1165.                                         { default for mail should be: kMailAppleMailCreator, }
  1166.                                         { kMailLtrMsgType }
  1167.                                         { OLD: type lttr indicates create letter }
  1168.     refCon: LONGINT;                    { for messages only }
  1169.     seqNum: LONGINT;                    { set if creating message in the inQueue }
  1170.     tunnelForm: BOOLEAN;                { if true tunnelForm else newForm }
  1171.     bccRecipients: BOOLEAN;                { true if creating letter with bcc recipients }
  1172.     newRef: MailMsgRef;
  1173.     END;
  1174.  
  1175.  
  1176. MSAMBeginNestedPB = RECORD
  1177.     qLink:    Ptr;
  1178.     reservedH1: LONGINT;
  1179.     reservedH2: LONGINT;
  1180.     ioCompletion: ProcPtr;
  1181.     ioResult: OSErr;
  1182.     saveA5: LONGINT;
  1183.     reqCode: INTEGER;
  1184.  
  1185.     mailMsgRef: MailMsgRef;
  1186.     refCon: LONGINT;                    { for messages only }
  1187.     msgType: IPMMsgType;
  1188.     END;
  1189.  
  1190.  
  1191. MSAMEndNestedPB = RECORD
  1192.     qLink:    Ptr;
  1193.     reservedH1: LONGINT;
  1194.     reservedH2: LONGINT;
  1195.     ioCompletion: ProcPtr;
  1196.     ioResult: OSErr;
  1197.     saveA5: LONGINT;
  1198.     reqCode: INTEGER;
  1199.  
  1200.     mailMsgRef: MailMsgRef;
  1201.     END;
  1202.  
  1203.  
  1204. MSAMSubmitPB = PACKED RECORD
  1205.     qLink:    Ptr;
  1206.     reservedH1: LONGINT;
  1207.     reservedH2: LONGINT;
  1208.     ioCompletion: ProcPtr;
  1209.     ioResult: OSErr;
  1210.     saveA5: LONGINT;
  1211.     reqCode: INTEGER;
  1212.  
  1213.     mailMsgRef: MailMsgRef;
  1214.     submitFlag: BOOLEAN;
  1215.     padByte: Byte;
  1216.     msgID: MailLetterID;
  1217.     END;
  1218.  
  1219.  
  1220. MSAMPutMsgHeaderPB = PACKED RECORD
  1221.     qLink:    Ptr;
  1222.     reservedH1: LONGINT;
  1223.     reservedH2: LONGINT;
  1224.     ioCompletion: ProcPtr;
  1225.     ioResult: OSErr;
  1226.     saveA5: LONGINT;
  1227.     reqCode: INTEGER;
  1228.  
  1229.     mailMsgRef: MailMsgRef;
  1230.     replyQueue: ^OCERecipient;
  1231.     sender: ^IPMSender;
  1232.     deliveryNotification: IPMNotificationType;
  1233.     priority: IPMPriority;
  1234.     END;
  1235.  
  1236.  
  1237. MSAMPutAttributePB = RECORD
  1238.     qLink:    Ptr;
  1239.     reservedH1: LONGINT;
  1240.     reservedH2: LONGINT;
  1241.     ioCompletion: ProcPtr;
  1242.     ioResult: OSErr;
  1243.     saveA5: LONGINT;
  1244.     reqCode: INTEGER;
  1245.  
  1246.     mailMsgRef: MailMsgRef;
  1247.     attrID: MailAttributeID;            { kMailIndicationsBit thru kMailSubjectBit }
  1248.     buffer: MailBuffer;
  1249.     END;
  1250.  
  1251.  
  1252. MSAMPutRecipientPB = RECORD
  1253.     qLink:    Ptr;
  1254.     reservedH1: LONGINT;
  1255.     reservedH2: LONGINT;
  1256.     ioCompletion: ProcPtr;
  1257.     ioResult: OSErr;
  1258.     saveA5: LONGINT;
  1259.     reqCode: INTEGER;
  1260.  
  1261.     mailMsgRef: MailMsgRef;
  1262.     attrID: MailAttributeID;            { kMailFromBit thru kMailBccBit }
  1263.     recipient: ^MailRecipient;
  1264.     responsible: BOOLEAN;                { valid for server and message msams only }
  1265.     END;
  1266.  
  1267.  
  1268. MSAMPutContentPB = PACKED RECORD
  1269.     qLink:    Ptr;
  1270.     reservedH1: LONGINT;
  1271.     reservedH2: LONGINT;
  1272.     ioCompletion: ProcPtr;
  1273.     ioResult: OSErr;
  1274.     saveA5: LONGINT;
  1275.     reqCode: INTEGER;
  1276.  
  1277.     mailMsgRef: MailMsgRef;
  1278.     segmentType: MailSegmentType;
  1279.     append: BOOLEAN;
  1280.     padByte: Byte;
  1281.     buffer: MailBuffer;
  1282.     textScrap: ^StScrpRec;
  1283.     startNewScript: BOOLEAN;
  1284.     script: ScriptCode;                { valid only if startNewScript is true }
  1285.     END;
  1286.  
  1287.  
  1288. MSAMPutEnclosurePB = RECORD
  1289.     qLink:    Ptr;
  1290.     reservedH1: LONGINT;
  1291.     reservedH2: LONGINT;
  1292.     ioCompletion: ProcPtr;
  1293.     ioResult: OSErr;
  1294.     saveA5: LONGINT;
  1295.     reqCode: INTEGER;
  1296.  
  1297.     mailMsgRef: MailMsgRef;
  1298.     contentEnclosure: BOOLEAN;
  1299.     padByte: BOOLEAN;
  1300.     hfs: BOOLEAN;                        { true => in file system, false => in memory }
  1301.     append: BOOLEAN;
  1302.     buffer: MailBuffer;                    { Unused if hfs == true }
  1303.     enclosure: FSSpec;
  1304.     addlInfo: MailEnclosureInfo;
  1305.     END;
  1306.  
  1307.  
  1308. MSAMPutBlockPB = RECORD
  1309.     qLink:    Ptr;
  1310.     reservedH1: LONGINT;
  1311.     reservedH2: LONGINT;
  1312.     ioCompletion: ProcPtr;
  1313.     ioResult: OSErr;
  1314.     saveA5: LONGINT;
  1315.     reqCode: INTEGER;
  1316.  
  1317.     mailMsgRef: MailMsgRef;
  1318.     refCon: LONGINT;                    { for messages only }
  1319.     blockType: OCECreatorType;
  1320.     append: BOOLEAN;
  1321.     buffer: MailBuffer;
  1322.     mode: MailBlockMode;                { if blockType is kMailTunnelLtrType or kMailHopInfoType }
  1323.                                         { mode is assumed to be kMailFromMark }
  1324.     offset: LONGINT;
  1325.     END;
  1326.  
  1327.  
  1328. {**************************************************************************************}
  1329. MSAMCreateReportPB = RECORD
  1330.     qLink:    Ptr;
  1331.     reservedH1: LONGINT;
  1332.     reservedH2: LONGINT;
  1333.     ioCompletion: ProcPtr;
  1334.     ioResult: OSErr;
  1335.     saveA5: LONGINT;
  1336.     reqCode: INTEGER;
  1337.  
  1338.     queueRef: MSAMQueueRef;            { to distinguish personal and server MSAMs }
  1339.     mailMsgRef: MailMsgRef;
  1340.     msgID: MailLetterID;            { kMailLetterIDBit of letter being reported upon }
  1341.     sender: ^MailRecipient;            { sender of the letter you are creating report on }
  1342.     END;
  1343.  
  1344.  
  1345. MSAMPutRecipientReportPB = RECORD
  1346.     qLink:    Ptr;
  1347.     reservedH1: LONGINT;
  1348.     reservedH2: LONGINT;
  1349.     ioCompletion: ProcPtr;
  1350.     ioResult: OSErr;
  1351.     saveA5: LONGINT;
  1352.     reqCode: INTEGER;
  1353.  
  1354.     mailMsgRef: MailMsgRef;
  1355.     recipientIndex: INTEGER;            { recipient index in the original letter }
  1356.     result: OSErr;                        { result of sending the recipient }
  1357.                                         { Values for result:
  1358.                                             kIPMNoResponsibility
  1359.                                             kIPMNoInformation
  1360.                                             kIPMRecMaybeNotSent
  1361.                                             kIPMRecMaybeSent
  1362.                                         }
  1363.     END;
  1364.  
  1365. {**************************************************************************************}
  1366.  
  1367. MailWakeupPMSAMPB = RECORD
  1368.     qLink:    Ptr;
  1369.     reservedH1: LONGINT;
  1370.     reservedH2: LONGINT;
  1371.     ioCompletion: ProcPtr;
  1372.     ioResult: OSErr;
  1373.     saveA5: LONGINT;
  1374.     reqCode: INTEGER;
  1375.  
  1376.     pmsamCID: CreationID;
  1377.     mailSlotID: MailSlotID;
  1378.     END;
  1379.  
  1380.  
  1381. MailCreateMailSlotPB = RECORD
  1382.     qLink:    Ptr;
  1383.     reservedH1: LONGINT;
  1384.     reservedH2: LONGINT;
  1385.     ioCompletion: ProcPtr;
  1386.     ioResult: OSErr;
  1387.     saveA5: LONGINT;
  1388.     reqCode: INTEGER;
  1389.  
  1390.     mailboxRef: MailboxRef;
  1391.     timeout: LONGINT;
  1392.     pmsamCID: CreationID;
  1393.     smca: SMCA;
  1394.     END;
  1395.  
  1396.  
  1397. MailModifyMailSlotPB = RECORD
  1398.     qLink:    Ptr;
  1399.     reservedH1: LONGINT;
  1400.     reservedH2: LONGINT;
  1401.     ioCompletion: ProcPtr;
  1402.     ioResult: OSErr;
  1403.     saveA5: LONGINT;
  1404.     reqCode: INTEGER;
  1405.  
  1406.     mailboxRef: MailboxRef;
  1407.     timeout: LONGINT;
  1408.     pmsamCID: CreationID;
  1409.     smca: SMCA;
  1410.     END;
  1411.  
  1412.  
  1413. {**************************************************************************************}
  1414. CONST
  1415. kPMSAMGetMSAMRecord        = 1286;
  1416. kPMSAMOpenQueues        = 1280;
  1417. kPMSAMLogError            = 1313;
  1418. kPMSAMSetStatus            = 1319;
  1419.  
  1420. kPMSAMCreateMsgSummary    = 1314;
  1421. kPMSAMPutMsgSummary        = 1317;
  1422. kPMSAMGetMsgSummary        = 1318;
  1423.  
  1424. kMailWakeupPMSAM        = 1287;
  1425.  
  1426. kSMSAMSetup                = 1315;
  1427. kSMSAMStartup            = 1281;
  1428. kSMSAMShutdown            = 1282;
  1429.  
  1430. kMSAMEnumerate            = 1283;
  1431. kMSAMDelete                = 1284;
  1432.  
  1433. kMSAMOpen                = 1288;
  1434. kMSAMOpenNested            = 1289;
  1435. kMSAMClose                = 1290;
  1436. kMSAMGetMsgHeader        = 1297;
  1437. kMSAMnMarkRecipients    = 1298;
  1438.  
  1439. kMSAMGetAttributes        = 1291;
  1440. kMSAMGetRecipients        = 1292;
  1441. kMSAMGetContent            = 1293;
  1442. kMSAMGetEnclosure        = 1294;
  1443. kMSAMEnumerateBlocks    = 1295;
  1444. kMSAMGetBlock            = 1296;
  1445. kMSAMMarkRecipients        = 1285;
  1446.  
  1447. kMSAMCreate                = 1300;
  1448. kMSAMBeginNested        = 1301;
  1449. kMSAMEndNested            = 1302;
  1450. kMSAMSubmit                = 1303;
  1451. kMSAMPutMsgHeader        = 1309;
  1452. kMSAMPutAttribute        = 1304;
  1453. kMSAMPutRecipient        = 1305;
  1454. kMSAMPutContent            = 1306;
  1455. kMSAMPutEnclosure        = 1307;
  1456. kMSAMPutBlock            = 1308;
  1457.  
  1458. kMSAMCreateReport        = 1311;
  1459. kMSAMPutRecipientReport    = 1312;
  1460.  
  1461. kMailCreateMailSlot        = 1323;
  1462. kMailModifyMailSlot        = 1324;
  1463.  
  1464.  
  1465. TYPE
  1466. MSAMParam = RECORD
  1467.     CASE INTEGER OF
  1468.          1: (header: MailParamBlockHeader);
  1469.          2: (pmsamGetMSAMRecord: PMSAMGetMSAMRecordPB);
  1470.          3: (pmsamOpenQueues: PMSAMOpenQueuesPB);
  1471.          4: (pmsamSetStatus: PMSAMSetStatusPB);
  1472.          5: (pmsamLogError: PMSAMLogErrorPB);
  1473.          6:    (smsamSetup: SMSAMSetupPB);
  1474.          7: (smsamStartup: SMSAMStartupPB);
  1475.          8: (smsamShutdown: SMSAMShutdownPB);
  1476.          9: (msamEnumerate: MSAMEnumeratePB);
  1477.         10: (msamDelete: MSAMDeletePB);
  1478.         11: (msamOpen: MSAMOpenPB);
  1479.         12: (msamOpenNested: MSAMOpenNestedPB);
  1480.         13: (msamClose: MSAMClosePB);
  1481.         14: (msamGetMsgHeader: MSAMGetMsgHeaderPB);
  1482.         15: (msamGetAttributes: MSAMGetAttributesPB);
  1483.         16: (msamGetRecipients: MSAMGetRecipientsPB);
  1484.         17: (msamGetContent: MSAMGetContentPB);
  1485.         18: (msamGetEnclosure: MSAMGetEnclosurePB);
  1486.         19: (msamEnumerateBlocks: MSAMEnumerateBlocksPB);
  1487.         20: (msamGetBlock: MSAMGetBlockPB);
  1488.         21: (msamMarkRecipients: MSAMMarkRecipientsPB);
  1489.         22: (msamnMarkRecipients: MSAMnMarkRecipientsPB);
  1490.         23: (msamCreate: MSAMCreatePB);
  1491.         24: (msamBeginNested: MSAMBeginNestedPB);
  1492.         25: (msamEndNested: MSAMEndNestedPB);
  1493.         26: (msamSubmit: MSAMSubmitPB);
  1494.         27: (msamPutMsgHeader: MSAMPutMsgHeaderPB);
  1495.         28: (msamPutAttribute: MSAMPutAttributePB);
  1496.         29: (msamPutRecipient: MSAMPutRecipientPB);
  1497.         30: (msamPutContent: MSAMPutContentPB);
  1498.         31: (msamPutEnclosure: MSAMPutEnclosurePB);
  1499.         32: (msamPutBlock: MSAMPutBlockPB);
  1500.         33: (msamCreateReport: MSAMCreateReportPB);        { Reports and Error Handling Calls }
  1501.         34: (msamPutRecipientReport: MSAMPutRecipientReportPB);
  1502.         35: (pmsamCreateMsgSummary: PMSAMCreateMsgSummaryPB);
  1503.         36: (pmsamPutMsgSummary: PMSAMPutMsgSummaryPB);
  1504.         37: (pmsamGetMsgSummary: PMSAMGetMsgSummaryPB);
  1505.         38: (wakeupPMSAM: MailWakeupPMSAMPB);
  1506.         39: (createMailSlot: MailCreateMailSlotPB);
  1507.         40: (modifyMailSlot: MailModifyMailSlotPB);
  1508.     END;
  1509.  
  1510.  
  1511.  
  1512.  
  1513. FUNCTION MailCreateMailSlot(VAR paramBlock: MSAMParam): OSErr;     { ASYNCHRONOUS ONLY, client must call WaitNextEvent }
  1514.     INLINE $7001, $1f00, $3f3c, kMailCreateMailSlot, _oceTBDispatch;
  1515. FUNCTION MailModifyMailSlot(VAR paramBlock: MSAMParam): OSErr;     { ASYNCHRONOUS ONLY, client must call WaitNextEvent }
  1516.     INLINE $7001, $1f00, $3f3c, kMailModifyMailSlot, _oceTBDispatch;
  1517. FUNCTION MailWakeupPMSAM(VAR paramBlock: MSAMParam): OSErr;      { ASYNCHRONOUS ONLY, client must call WaitNextEvent }
  1518.     INLINE $7001, $1f00, $3f3c, kMailWakeupPMSAM, _oceTBDispatch;
  1519.  
  1520. { Personal MSAM Glue Routines }
  1521. FUNCTION PMSAMOpenQueues(VAR paramBlock: MSAMParam): OSErr;
  1522.     INLINE $7000, $1f00, $3f3c, kPMSAMOpenQueues, _oceTBDispatch;
  1523. FUNCTION PMSAMSetStatus(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1524.     INLINE $3f3c, kPMSAMSetStatus, _oceTBDispatch;
  1525. FUNCTION PMSAMGetMSAMRecord(VAR paramBlock: MSAMParam): OSErr;    { SYNC ONLY }
  1526.     INLINE $7000, $1f00, $3f3c, kPMSAMGetMSAMRecord, _oceTBDispatch;
  1527.  
  1528. { Server MSAM Glue Routines }
  1529. FUNCTION SMSAMSetup(VAR paramBlock: MSAMParam): OSErr;    { SYNC ONLY }
  1530.     INLINE $7000, $1f00, $3f3c, kSMSAMSetup, _oceTBDispatch;
  1531. FUNCTION SMSAMStartup(VAR paramBlock: MSAMParam): OSErr;    { SYNC ONLY }
  1532.     INLINE $7000, $1f00, $3f3c, kSMSAMStartup, _oceTBDispatch;
  1533. FUNCTION SMSAMShutdown(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1534.     INLINE $3f3c, kSMSAMShutdown, _oceTBDispatch;
  1535.  
  1536. { Get Interface Glue Routines }
  1537. FUNCTION MSAMEnumerate(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1538.     INLINE $3f3c, kMSAMEnumerate, _oceTBDispatch;
  1539. FUNCTION MSAMDelete(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1540.     INLINE $3f3c, kMSAMDelete, _oceTBDispatch;
  1541. FUNCTION MSAMMarkRecipients(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1542.     INLINE $3f3c, kMSAMMarkRecipients, _oceTBDispatch;
  1543. FUNCTION MSAMnMarkRecipients(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1544.     INLINE $3f3c, kMSAMnMarkRecipients, _oceTBDispatch;
  1545.  
  1546. FUNCTION MSAMOpen(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1547.     INLINE $3f3c, kMSAMOpen, _oceTBDispatch;
  1548. FUNCTION MSAMOpenNested(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1549.     INLINE $3f3c, kMSAMOpenNested, _oceTBDispatch;
  1550. FUNCTION MSAMClose(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1551.     INLINE $3f3c, kMSAMClose, _oceTBDispatch;
  1552.  
  1553. FUNCTION MSAMGetRecipients(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1554.     INLINE $3f3c, kMSAMGetRecipients, _oceTBDispatch;
  1555. FUNCTION MSAMGetAttributes(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1556.     INLINE $3f3c, kMSAMGetAttributes, _oceTBDispatch;
  1557. FUNCTION MSAMGetContent(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1558.     INLINE $3f3c, kMSAMGetContent, _oceTBDispatch;
  1559. FUNCTION MSAMGetEnclosure(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1560.     INLINE $3f3c, kMSAMGetEnclosure, _oceTBDispatch;
  1561. FUNCTION MSAMEnumerateBlocks(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1562.     INLINE $3f3c, kMSAMEnumerateBlocks, _oceTBDispatch;
  1563. FUNCTION MSAMGetBlock(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1564.     INLINE $3f3c, kMSAMGetBlock, _oceTBDispatch;
  1565. FUNCTION MSAMGetMsgHeader(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1566.     INLINE $3f3c, kMSAMGetMsgHeader, _oceTBDispatch;
  1567.  
  1568. { Put Interface Glue Routines }
  1569. FUNCTION MSAMCreate(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1570.     INLINE $3f3c, kMSAMCreate, _oceTBDispatch;
  1571. FUNCTION MSAMBeginNested(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1572.     INLINE $3f3c, kMSAMBeginNested, _oceTBDispatch;
  1573. FUNCTION MSAMEndNested(VAR paramBlock: MSAMParam): OSErr;
  1574.     INLINE $7000, $1f00, $3f3c, kMSAMEndNested, _oceTBDispatch;
  1575. FUNCTION MSAMSubmit(VAR paramBlock: MSAMParam): OSErr;
  1576.     INLINE $7000, $1f00, $3f3c, kMSAMSubmit, _oceTBDispatch;        {  SYNCHRONOUS ONLY }
  1577.  
  1578. FUNCTION MSAMPutAttribute(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1579.     INLINE $3f3c, kMSAMPutAttribute, _oceTBDispatch;
  1580. FUNCTION MSAMPutRecipient(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1581.     INLINE $3f3c, kMSAMPutRecipient, _oceTBDispatch;
  1582. FUNCTION MSAMPutContent(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1583.     INLINE $3f3c, kMSAMPutContent, _oceTBDispatch;
  1584. FUNCTION MSAMPutEnclosure(VAR paramBlock: MSAMParam): OSErr;
  1585.     INLINE $7000, $1f00, $3f3c, kMSAMPutEnclosure, _oceTBDispatch;    {  SYNCHRONOUS ONLY }
  1586. FUNCTION MSAMPutBlock(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1587.     INLINE $3f3c, kMSAMPutBlock, _oceTBDispatch;
  1588. FUNCTION MSAMPutMsgHeader(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1589.     INLINE $3f3c, kMSAMPutMsgHeader, _oceTBDispatch;
  1590.  
  1591. { Reports and Error Handling Glue Routines }
  1592. FUNCTION MSAMCreateReport(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1593.     INLINE $3f3c, kMSAMCreateReport, _oceTBDispatch;
  1594. FUNCTION MSAMPutRecipientReport(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1595.     INLINE $3f3c, kMSAMPutRecipientReport, _oceTBDispatch;
  1596. FUNCTION PMSAMLogError(VAR paramBlock: MSAMParam): OSErr;
  1597.     INLINE $7000, $1f00, $3f3c, kPMSAMLogError, _oceTBDispatch;
  1598.  
  1599. { MsgSummary Glue Routines }
  1600. FUNCTION PMSAMCreateMsgSummary(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1601.     INLINE $3f3c, kPMSAMCreateMsgSummary, _oceTBDispatch;
  1602. FUNCTION PMSAMPutMsgSummary(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1603.     INLINE $3f3c, kPMSAMPutMsgSummary, _oceTBDispatch;
  1604. FUNCTION PMSAMGetMsgSummary(VAR paramBlock: MSAMParam; asyncFlag: BOOLEAN): OSErr;
  1605.     INLINE $3f3c, kPMSAMGetMsgSummary, _oceTBDispatch;
  1606.  
  1607.  
  1608.  
  1609. {$ENDC}    { UsingOCEMail }
  1610.  
  1611. {$IFC NOT UsingIncludes}
  1612.     END.
  1613. {$ENDC}
  1614.